
// 支持使用自定义的基准时间

type OffsetType = 'second' | 'minute' | 'hour' | 'day'
interface OffsetComputeConfiguration {
    minute: number,
    second: number,
    hour: number,
    day: number
}

/**
 * 计算时间偏移量的工具函数，返回距离当前本地时间指定量的日期时间
 */
export default class TimeSpan {
    private static offsets: OffsetComputeConfiguration = {
        second: 1,
        minute: 60,
        hour: 60 * 60,
        day: 60 * 60 * 24
    }
    private static toDateTime(timeStamp: number): Date {
        return new Date(timeStamp)
    }
    /**
     * 
     * @param type 偏移类型
     * @param offsetValue 偏移量 
     * @param baseDateTime 基准时间，默认为当前时间
     * @returns 
     */
    public static offset(type: OffsetType, offsetValue: number, baseDateTime: number = Date.now()): Date {
        return this.toDateTime(baseDateTime + offsetValue * this.offsets[type] * 1000)
    }
}

TimeSpan.offset('second', 2)
TimeSpan.offset('minute', 2)
TimeSpan.offset('hour', 2)
TimeSpan.offset('day', 2)

// 存在问题：需求的增加导致方法参数越来越多，调用者疑惑，且每次改动调用方都得跟着改（即使调用方不需要使用这些新的参数，往往也需要保证传参数量一致）